home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / pao / towns / cdplay / src / cdpndisp.c < prev    next >
Text File  |  1991-10-18  |  64KB  |  1,957 lines

  1. /* << High C V1.4 >> **********************************************************
  2. **
  3. **    CD 演奏ライブラリを使用した CD PLAYER 用表示ルーチン
  4. **
  5. **    1991.03.19 : CREATE
  6. **    1991.03.23 : FINISH
  7. **
  8. **    < HISTORY >
  9. **    1991.03.19 : CREATE
  10. **
  11. **    < note > : TABS = 4
  12. **
  13. **    All Rights Reserved, Copyright (C) Y.Hirata 1991.
  14. **
  15. **    Programmed by Y.Hirata ( Nifty ID : NAB03321 )
  16. **
  17. ******************************************************************************/
  18.  
  19. #include <stdio.h>
  20. #include <string.h>
  21. #include <egb.h>
  22. #include <mos.h>
  23. #include "grp.h"
  24. #include "cdpn.h"
  25. #include "switch.h"
  26. #include "word.h"
  27. #include "elevol.h"
  28. #include "tape.h"
  29.  
  30. #define    PROGRAM_NAME    "パオパオ CD PLAYER v0.86"
  31. #define    COPYRIGHT_NAME    "Copyright (C) Y.Hirata 1991."
  32.  
  33. /*-----------------------------------------------------------------------------
  34. **    ここでは、マウスの制御をしていません.
  35. **    ☆呼出し側で必要に応じてマウスのOFF/ONをする必要があります.
  36. **
  37. **    paintMode / writeMode / Color は、表示する前にかならず指定して下さい.
  38. **    ここでは、変更したままで リターン します.
  39. -----------------------------------------------------------------------------*/
  40.  
  41. char    Flg_disptoc = FALSE ;                    /*  曲情報が表示済か?        */
  42.  
  43. /*******************************  マウス 表示制御  ******************************/
  44. void dispmouse( int sw )
  45. /*=============================================================================
  46. **    マウスカーソル の表示を ON/OFF する.
  47. **
  48. **    < INPUT  > : 表示スイッチ ( 真:表示 , 偽:非表示 )
  49. **    < OUTPUT > : なし
  50. **    < RETURN > : なし
  51. =============================================================================*/
  52. {
  53.     if ( Flg.mouse == sw ) return ;
  54.  
  55.     MOS_disp( sw ) ;
  56.     if ( sw ) Flg.mouse = TRUE ;
  57.     else      Flg.mouse = FALSE ;
  58. }
  59.  
  60. /****************************  メッセージ表示領域クリア  ****************************/
  61. void dispmsgclear( void )
  62. /*=============================================================================
  63. **    画面下 2段のメッセージ領域を クリア する.
  64. **
  65. **    < INPUT  > : なし
  66. **    < OUTPUT > : なし
  67. **    < RETURN > : なし
  68. =============================================================================*/
  69. {
  70.     EGB_color( Gwork,2,COLOR_SCREEN_BACK ) ;    /*  面塗り色                */
  71.     EGB_paintMode( Gwork,0x20 ) ;
  72.     EGB_writeMode( Gwork,PSET ) ;
  73.     box( Gwork,PSMsg.x,PSMsg.y,PSMsg.x+SZMsg.x-1,PSMsg.y+SZMsg.y-1 ) ;
  74. }
  75.  
  76. /*******************************  メッセージ表示  ********************************/
  77. void disperrormsg( int errno )
  78. /*=============================================================================
  79. **    メッセージIDに対応したメッセージを表示する.
  80. **
  81. **    < INPUT  > : エラー値
  82. **    < OUTPUT > : なし
  83. **    < RETURN > : なし
  84. =============================================================================*/
  85. {
  86.     char    *CDDA_ERR_msg[] = {
  87.             "正常終了.",                                    /*  000(0x000)    */
  88.             "CDがセットされていません.",                    /*  001(0x001)    */
  89.             "パラメタに誤りがあります.",                    /*  002(0x002)    */
  90.             "CDドライブが接続されていません.",            /*  004(0x004)    */
  91.             "コマンドが異常終了しました.",                    /*  008(0x008)    */
  92.             "メディアエラー.",                                /*  016(0x010)    */
  93.             "ハードエラー.",                                /*  032(0x020)    */
  94.             "パリティエラー.",                                /*  064(0x040)    */
  95.             "メディアが交換されてます.",                    /*  128(0x080)    */
  96.             "デバイス番号に誤りがあります.",                /*  256(0x100)    */
  97.             "セクタ長が違います.",                            /*  257(0x101)    */
  98.             "音楽演奏中です.",                                /*  258(0x102)    */
  99.             "一時停止中です.",                                /*  260(0x104)    */
  100.             "一時停止状態ではありません.",                    /*  264(0x108)    */
  101.             "音楽データがありません.",                        /*  272(0x110)    */
  102.             "繰り返し演奏を開始しました.",                    /*  288(0x120)    */
  103.             "該当メッセージなし."                            /*  ---(0x---)    */
  104.             } ;
  105.     char    *CDDA_STATUS_msg[] = {
  106.             "CDがセットされていません.",
  107.             "停止中です.",
  108.             "演奏中です.",
  109.             "一時停止中です."
  110.             } ;
  111.     int        c, chk, no ;
  112.     int        nomsg = 16 ;
  113.  
  114.     if ( !CDDA_DEBUG ) return ;
  115.  
  116.     chk = 0x0001 ;
  117.     no = 0 ;
  118.     for ( c=0; c<8; c++ ) {
  119.         if ( ((errno & 0x00ff) & chk) == chk ) no = c + 1 ;
  120.         chk <<= 1 ;
  121.     }
  122.     if ( errno > 255 ) no += 9 ;
  123.     if ( errno != 0 && no == 0 ) no = nomsg ;
  124.     if ( no < 0 || no > nomsg ) no = nomsg ;
  125.     sprintf( Textbuf,"ERROR(%04xh): %s",errno,CDDA_ERR_msg[no] ) ;
  126.     EGB_color( Gwork,0,COLOR_ERROR ) ;
  127.     EGB_color( Gwork,1,COLOR_SCREEN_BACK ) ;
  128.     EGB_paintMode( Gwork,0x02 ) ;
  129.     EGB_writeMode( Gwork,OPAQUE ) ;
  130.     disptext( Gwork,PSMsg.x,PSMsg.y+19+YCDOT-1,Textbuf ) ;    /*  メッセージ2段目    */
  131.  
  132. #if 0
  133.     no = CDDA_NOW_status ;
  134.     if ( no < 0 ) {
  135.         no = 0 ;
  136.     } else {
  137.         no ++ ;
  138.     }
  139.     sprintf( Textbuf,"Now status(%d): %s",
  140.             CDDA_NOW_status,CDDA_STATUS_msg[no] ) ;
  141.     EGB_color( Gwork,0,COLOR_WARNING ) ;
  142.     disptext( Gwork,PSMsg.x,PSMsg.y+19+YCDOT-1,Textbuf ) ;    /*  メッセージ2段目    */
  143. #endif
  144. }
  145.  
  146. /*********************************  タイトル表示  ********************************/
  147. void disptitle( void )
  148. /*=============================================================================
  149. **    プログラム名/COPYRIGHT 表示をする.
  150. **
  151. **    < INPUT  > : なし
  152. **    < OUTPUT > : なし
  153. **    < RETURN > : なし
  154. =============================================================================*/
  155. {
  156.     char    title[80] ;
  157.     int        c ;
  158.  
  159.     EGB_paintMode( Gwork,0x02 ) ;
  160.     EGB_writeMode( Gwork,PSET ) ;
  161.     EGB_fontStyle( Gwork,0x0004 ) ;                /*  影付文字                */
  162.  
  163. /*    ↓↓                        ★★ DEBUG ★★                        ↓↓    */
  164.     if ( CDDA_DEBUG ) {
  165.         EGB_color( Gwork,0,C_REDON ) ;            /*  前景色                    */
  166.         EGB_color( Gwork,1,C_REDOFF ) ;            /*  背景色                    */
  167.     } else {
  168. /*    ↑↑                        ★★ DEBUG ★★                        ↑↑    */
  169.  
  170.         EGB_color( Gwork,0,COLOR_TITLE ) ;        /*  前景色                    */
  171.         EGB_color( Gwork,1,COLOR_TITLE_BACK ) ;    /*  背景色                    */
  172.     }
  173.  
  174.     strcpy( title,PROGRAM_NAME ) ;
  175. /*    ↓↓                        ★★ DEBUG ★★                        ↓↓    */
  176.     if ( CDDA_DEBUG ) {
  177.         strcat( title,"  << DEBUG MODE >>" ) ;
  178.     }
  179. /*    ↑↑                        ★★ DEBUG ★★                        ↑↑    */
  180.     disptext( Gwork,PSTitle.x,PSTitle.y+YCDOT-1,title ) ;
  181.  
  182.     strcpy( title,COPYRIGHT_NAME ) ;
  183.     c = ( 80 - strlen( title ) - 1 ) * XCDOT - 1 ;
  184.     if ( c < ZERO ) c = ZERO ;
  185.     disptext( Gwork,c,PSTitle.y+YCDOT-1,title ) ;
  186. /*-----------------------------------------------------------------------------
  187. **    字体は、標準であることを前提としているために、変更後必ず標準体に戻す.
  188. -----------------------------------------------------------------------------*/
  189.     EGB_fontStyle( Gwork,0x0000 ) ;                /*  通常文字                */
  190. }
  191.  
  192. /*****************************  EXITボタン描画  ********************************/
  193. void dispexit( int sw )
  194. /*=============================================================================
  195. **    EXIT ボタン を表示する.
  196. **
  197. **    < INPUT  > : スイッチ ON/OFF 状態.
  198. **    < OUTPUT > : なし
  199. **    < RETURN > : なし
  200. =============================================================================*/
  201. {
  202.     unsigned int    p ;
  203.  
  204.     if ( sw ) {
  205.         if ( Swstat[SW_EXIT] ) return ;
  206.         Swstat[SW_EXIT] = TRUE ;
  207.     } else {
  208.         if ( !Swstat[SW_EXIT] ) return ;
  209.         Swstat[SW_EXIT] = FALSE ;
  210.     }
  211.  
  212.     if ( sw ) {                                    /*  スイッチ ON                    */
  213.         p = (unsigned int)DATA_exit ;
  214.     } else {                                    /*  スイッチ OFF                */
  215.         p = (unsigned int)DATA_exit ;
  216.     }
  217.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  218.     EGB_writeMode( Gwork,PSET ) ;
  219.     put( Gwork,Position[SW_EXIT].s.x,Position[SW_EXIT].s.y,
  220.             Position[SW_EXIT].e.x,Position[SW_EXIT].e.y,p,4 ) ;
  221. }
  222.  
  223. /****************************  プログラムTIME表示  ******************************/
  224. void dispprogramtime( void )
  225. /*=============================================================================
  226. **    プログラム設定された曲の合計時間とプログラム設定されていない曲の合計時間を表示
  227. **    する.
  228. **
  229. **    < INPUT  > : なし
  230. **    < OUTPUT > : なし
  231. **    < RETURN > : なし
  232. =============================================================================*/
  233. {
  234.     int        xs ;
  235.  
  236.     if ( Playmode != SW_PROGRAM ) return ;
  237.  
  238.     EGB_color( Gwork,0,COLOR_INFO_ON ) ;        /*  前景色                */
  239.     EGB_color( Gwork,1,COLOR_INFO_BACK ) ;        /*  背景色                */
  240.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                */
  241.     EGB_writeMode( Gwork,OPAQUE ) ;
  242.  
  243.     sprintf( Textbuf," A %2d分%02d秒%02d ",
  244.         CDDA_TIME_program.min,CDDA_TIME_program.sec,CDDA_TIME_program.frame
  245.     ) ;
  246.     xs = PSInf.x + 1 ;
  247.     /*    メッセージ 1段目    */
  248.     disptext( Gwork,xs,PSMsg.y+2+YCDOT-1,Textbuf ) ;
  249.  
  250.     EGB_color( Gwork,0,COLOR_INFO_OFF ) ;        /*  前景色                */
  251.     sprintf( Textbuf," B %2d分%02d秒%02d ",
  252.         CDDA_TIME_program2.min,CDDA_TIME_program2.sec,CDDA_TIME_program2.frame
  253.     ) ;
  254.     xs = PSInf.x + 1 + 121 ;
  255.     /*    メッセージ 1段目    */
  256.     disptext( Gwork,xs,PSMsg.y+2+YCDOT-1,Textbuf ) ;
  257.  
  258.     if ( !Flg.tape ) return ;
  259.     xs = PSInf.x + 1 + 121 * 2 ;
  260.     WORD_put9p( Gwork,xs+XCDOT+XCDOT,PSMsg.y+2,
  261.             COLOR_INFO_TAPE,COLOR_SCREEN_BACK,"TAPE" ) ;
  262.  
  263.     EGB_color( Gwork,0,COLOR_INFO_ON ) ;        /*  前景色                */
  264.     EGB_color( Gwork,1,COLOR_INFO_BACK ) ;        /*  背景色                */
  265.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                */
  266.     EGB_writeMode( Gwork,OPAQUE ) ;
  267.     if ( Tapetime > ZERO ) {
  268.         sprintf( Textbuf,"%3d",Tapetime ) ;
  269.     } else {
  270.         sprintf( Textbuf,"***" ) ;
  271.     }
  272.     /*    メッセージ 1段目    */
  273.     disptext( Gwork,xs+6*XCDOT,PSMsg.y+2+YCDOT-1,Textbuf ) ;
  274. }
  275.  
  276. /***************************  時間表示時のマウス制御  ***************************/
  277. int disptimemouse( int sw )
  278. /*=============================================================================
  279. **    時間表示の際のマウス ON/OFF をする.
  280. **
  281. **    < INPUT  > : sw が 真 ならば、マウス 表示 , 偽 ならば マウス 非表示.
  282. **    < OUTPUT > : なし
  283. **    < RETURN > : マウス 制御をしたならば、真値 , なにもしなければ 偽値.
  284. =============================================================================*/
  285. {
  286.     if ( Position[SW_TIME].s.x-16 < Mosx && Mosx < Position[SW_TIME].e.x &&
  287.             Position[SW_TIME].s.y-16 < Mosy && Mosy < Position[SW_TIME].e.y ) {
  288.         dispmouse( sw ) ;
  289.         return( TRUE ) ;
  290.     }
  291.     return( FALSE ) ;
  292. }
  293.  
  294. /****************************  TIME 情報 表示  *******************************/
  295. void disptimeinfo( void )
  296. /*=============================================================================
  297. **    時間表示情報を描画する.
  298. **
  299. **    < INPUT  > : なし
  300. **    < OUTPUT > : なし
  301. **    < RETURN > : なし
  302. =============================================================================*/
  303. {
  304.     switch ( Timemode ) {
  305.     case TM_TR_CLOCK :
  306.     case TM_TR_TIME :
  307.         WORD_put7p( Gwork,Position[SW_TIME].s.x+3*XCDOT,
  308.                 Position[SW_TIME].s.y+27,COLOR_TIME_INFO,COLOR_TIME_BACK,
  309.                 "TIME " ) ;
  310.         break ;
  311.     case TM_DISC_CLOCK :
  312.     case TM_DISC_TIME :
  313.         WORD_put7p( Gwork,Position[SW_TIME].s.x+3*XCDOT,
  314.                 Position[SW_TIME].s.y+27,COLOR_TIME_INFO,COLOR_TIME_BACK,
  315.                 "TOTAL" ) ;
  316.     }
  317.  
  318.     Dispmode = Timemode ;
  319. }
  320.  
  321. /***********************  TIME BOX プログラムモード時の表示  **********************/
  322. void disptimeprgsw( void )
  323. /*=============================================================================
  324. **    時間表示枠内のプログラムモード用マークのON/OFF表示する.
  325. **
  326. **    < INPUT  > : なし
  327. **    < OUTPUT > : なし
  328. **    < RETURN > : なし
  329. =============================================================================*/
  330. {
  331.     int        mosflg ;
  332.  
  333.     mosflg = disptimemouse( FALSE ) ;
  334.  
  335.     EGB_writeMode( Gwork,PSET ) ;
  336.  
  337.     if ( Playmode == SW_PROGRAM ) {
  338.         EGB_paintMode( Gwork,0x02 ) ;                /*  境界                */
  339.         EGB_color( Gwork,0,COLOR_TIME_PROG ) ;        /*  前景色                */
  340.         put( Gwork,Position[SW_TIME].s.x+16*XCDOT,Position[SW_TIME].s.y+3,
  341.                 Position[SW_TIME].s.x+19*XCDOT-1,Position[SW_TIME].s.y+3+6,
  342.                 (unsigned int)WORD_program,1 ) ;
  343.     } else {
  344.         EGB_paintMode( Gwork,0x20 ) ;                /*  面塗り                */
  345.         EGB_color( Gwork,2,COLOR_TIME_BACK ) ;        /*  面塗り色            */
  346.         box( Gwork,Position[SW_TIME].s.x+16*XCDOT,Position[SW_TIME].s.y+3,
  347.                 Position[SW_TIME].s.x+19*XCDOT-1,Position[SW_TIME].s.y+3+6 ) ;
  348.         box( Gwork,Position[SW_TIME].s.x+16*XCDOT,Position[SW_TIME].s.y+13,
  349.                 Position[SW_TIME].s.x+19*XCDOT-1,
  350.                 Position[SW_TIME].s.y+13+YCDOT-1 ) ;
  351. /*-----------------------------------------------------------------------------
  352. **    Flg.prgchk が真値だと、時間表示されないので、FALSEにし待ち時間をクリアする.
  353. -----------------------------------------------------------------------------*/
  354.         Flg.prgchk = FALSE ;
  355.         Tcount2 = PRG_WAIT + 1 ;
  356.     }
  357.  
  358.     if ( mosflg ) disptimemouse( TRUE ) ;
  359. }
  360.  
  361. /*****************************  TIME BOX 表示  *******************************/
  362. void disptimebox( void )
  363. /*=============================================================================
  364. **    時間表示用のBOXを描画する.
  365. **
  366. **    < INPUT  > : なし
  367. **    < OUTPUT > : なし
  368. **    < RETURN > : なし
  369. =============================================================================*/
  370. {
  371.     static char    initflg = FALSE ;
  372.  
  373. /*-----------------------------------------------------------------------------
  374. **    時間表示領域の描画
  375. -----------------------------------------------------------------------------*/
  376.     EGB_color( Gwork,2,COLOR_TIME_BACK ) ;            /*  面塗り色            */
  377.     EGB_paintMode( Gwork,0x20 ) ;                    /*  面塗り                */
  378.     EGB_writeMode( Gwork,PSET ) ;
  379.     box( Gwork,Position[SW_TIME].s.x+1,Position[SW_TIME].s.y+1,
  380.             Position[SW_TIME].e.x-1,Position[SW_TIME].e.y-1 ) ;
  381.  
  382.     if ( !initflg ) {
  383.         EGB_paintMode( Gwork,0x02 ) ;                /*  境界                */
  384.         EGB_color( Gwork,0,COLOR_TIME_BOX0 ) ;        /*  前景色                */
  385.         line( Gwork,Position[SW_TIME].s.x,Position[SW_TIME].e.y-1,
  386.                 Position[SW_TIME].s.x,Position[SW_TIME].s.y ) ;    /*  縦線    */
  387.         line( Gwork,Position[SW_TIME].s.x,Position[SW_TIME].s.y,
  388.                 Position[SW_TIME].e.x,Position[SW_TIME].s.y ) ;    /*  横線    */
  389.         EGB_color( Gwork,0,COLOR_TIME_BOX1 ) ;        /*  前景色                */
  390.         line( Gwork,Position[SW_TIME].s.x,Position[SW_TIME].e.y,
  391.                 Position[SW_TIME].e.x,Position[SW_TIME].e.y ) ;    /*  横線    */
  392.         line( Gwork,Position[SW_TIME].e.x,Position[SW_TIME].e.y,
  393.                 Position[SW_TIME].e.x,Position[SW_TIME].s.y+1 ) ;/*  縦線    */
  394.         initflg = TRUE ;
  395.     }
  396.  
  397. /*-----------------------------------------------------------------------------
  398. **    プログラムモードチェック表示
  399. -----------------------------------------------------------------------------*/
  400.     disptimeprgsw() ;
  401.  
  402. /*-----------------------------------------------------------------------------
  403. **    時間表示情報の描画
  404. -----------------------------------------------------------------------------*/
  405.     WORD_put7p( Gwork,Position[SW_TIME].s.x+3*XCDOT,
  406.             Position[SW_TIME].s.y+7,COLOR_TIME_DISC,COLOR_TIME_BACK,
  407.             "DISC" ) ;
  408.     disptimeinfo() ;
  409.  
  410. /*-----------------------------------------------------------------------------
  411. **    表示情報 クリア
  412. -----------------------------------------------------------------------------*/
  413.     Dispmode = Timemode ;
  414.     Dispno = Dispmin = Dispsec = -1 ;
  415. }
  416.  
  417. /******************************  曲番号の表示  *******************************/
  418. int disptimemusicno( int no )
  419. /*=============================================================================
  420. **    時間表示枠内に曲番号を表示する.
  421. **
  422. **    < INPUT  > : 曲番号
  423. **    < OUTPUT > : なし
  424. **    < RETURN > : 曲番号表示後に時間情報を表示する必要ありか?
  425. **                 真値 ならば、時間情報を表示する必要あり.
  426. **                 偽値 ならば、時間情報を表示する必要なし.
  427. =============================================================================*/
  428. {
  429.     if ( Timemode != Dispmode ) {
  430.         disptimeinfo() ;
  431.     }
  432.  
  433.     EGB_color( Gwork,0,COLOR_TIME_MUSIC ) ;            /*  前景色                */
  434.     EGB_color( Gwork,1,COLOR_TIME_BACK ) ;            /*  背景色                */
  435.     EGB_paintMode( Gwork,0x02 ) ;                    /*  境界                */
  436.     EGB_writeMode( Gwork,OPAQUE ) ;
  437.  
  438.     switch ( Timemode ) {
  439.     case TM_TR_CLOCK :
  440.     case TM_TR_TIME :
  441. /*-----------------------------------------------------------------------------
  442. **    プログラム確認
  443. -----------------------------------------------------------------------------*/
  444.         if ( Flg.prgchk ) {                            /*  プログラム確認        */
  445.             EGB_color( Gwork,0,COLOR_TIME_PRG ) ;    /*  前景色            */
  446.             if ( no ) {
  447.                 sprintf( Textbuf,"%2d",CDDA_COUNT_program ) ;
  448.                 if ( CDDA_COUNT_program == CDDA_REMAIN_program ) {
  449.                 /*    登録してある最後の曲    */
  450.                     strcat( Textbuf,"." ) ;
  451.                 } else {
  452.                     strcat( Textbuf," " ) ;
  453.                 }
  454.             } else {
  455.                 sprintf( Textbuf,"END" ) ;
  456.             }
  457.         } else {
  458.             sprintf( Textbuf,"   " ) ;
  459.         }
  460.         disptimemouse( FALSE ) ;
  461.         if ( Flg.prgchk && no ) {
  462.             disptext( Gwork,Position[SW_TIME].s.x+16*XCDOT,
  463.                     Position[SW_TIME].s.y+13+YCDOT-1,"   " ) ;
  464.             WORD_put9p( Gwork,Position[SW_TIME].s.x+16*XCDOT+XCDOT9P,
  465.                     Position[SW_TIME].s.y+13,
  466.                     COLOR_TIME_PRG,COLOR_TIME_BACK,Textbuf ) ;
  467.             EGB_color( Gwork,0,COLOR_TIME_MUSIC ) ;        /*  前景色            */
  468.             EGB_color( Gwork,1,COLOR_TIME_BACK ) ;        /*  背景色            */
  469.             EGB_paintMode( Gwork,0x02 ) ;                /*  境界            */
  470.             EGB_writeMode( Gwork,OPAQUE ) ;
  471.         } else {
  472.             disptext( Gwork,Position[SW_TIME].s.x+16*XCDOT,
  473.                     Position[SW_TIME].s.y+13+YCDOT-1,Textbuf ) ;
  474.         }
  475.  
  476. /*-----------------------------------------------------------------------------
  477. **    1曲演奏時に、演奏終了する前に次の曲の頭を少し演奏してしまうことがあるの
  478. **    で、表示する際には、チェックをする必要がある.
  479. -----------------------------------------------------------------------------*/
  480.         if ( CDDA_NOW_start == CDDA_NOW_end ) {        /*  一曲演奏時        */
  481.             if ( CDDA_NOW_start != CDDA_NOW_musicno &&
  482.                     Playmode != SW_PROGRAM ) {
  483.                 disptimemouse( TRUE ) ;
  484.                 return( FALSE ) ;
  485.             }
  486.         }
  487.         if ( CDDA_NOW_musicno == Dispno ) break ;
  488.         Dispno = CDDA_NOW_musicno ;
  489. /*-----------------------------------------------------------------------------
  490. **    曲番号表示
  491. -----------------------------------------------------------------------------*/
  492.         EGB_color( Gwork,0,COLOR_TIME_MUSIC ) ;        /*  前景色            */
  493.         if ( CDDA_NOW_musicno ) {
  494.             sprintf( Textbuf,"%2d",CDDA_NOW_musicno ) ;
  495.         } else {
  496.             sprintf( Textbuf,"--" ) ;
  497.         }
  498.         disptimemouse( FALSE ) ;
  499.         disptext( Gwork,Position[SW_TIME].s.x+10*XCDOT,
  500.                 Position[SW_TIME].s.y+7+YCDOT-1,Textbuf ) ;
  501.         break ;
  502.     case TM_DISC_CLOCK :
  503.     case TM_DISC_TIME :
  504. /*-----------------------------------------------------------------------------
  505. **    1曲演奏時に、演奏終了する前に次の曲の頭を少し演奏してしまうことがあるの
  506. **    で、表示する際には、チェックをする必要がある.
  507. -----------------------------------------------------------------------------*/
  508.         if ( CDDA_NOW_start == CDDA_NOW_end ) {    /*  一曲演奏時            */
  509.             if ( CDDA_NOW_start != CDDA_NOW_musicno &&
  510.                     Playmode != SW_PROGRAM ) {
  511.                 disptimemouse( TRUE ) ;
  512.                 return( FALSE ) ;
  513.             }
  514.         }
  515.         if ( Dispno == ZERO ) break ;
  516.         Dispno = ZERO ;
  517.  
  518.         disptimemouse( FALSE ) ;
  519.         if ( no ) {
  520.             disptext( Gwork,Position[SW_TIME].s.x+10*XCDOT,
  521.                     Position[SW_TIME].s.y+7+YCDOT-1,"  " ) ;
  522.         } else {
  523.             disptext( Gwork,Position[SW_TIME].s.x+10*XCDOT,
  524.                     Position[SW_TIME].s.y+7+YCDOT-1,"--" ) ;
  525.         }
  526.     }
  527.  
  528.     return( TRUE ) ;
  529. }
  530.  
  531. /******************************  曲時間の表示  *******************************/
  532. void disptimeclock( void )
  533. /*=============================================================================
  534. **    時間表示枠内に曲時間を表示する.
  535. **
  536. **    < INPUT  > : なし
  537. **    < OUTPUT > : なし
  538. **    < RETURN > : なし
  539. =============================================================================*/
  540. {
  541.     int        cmp ;
  542.  
  543.     EGB_color( Gwork,0,COLOR_TIME ) ;                /*  前景色                */
  544.     EGB_color( Gwork,1,COLOR_TIME_BACK ) ;            /*  背景色                */
  545.     EGB_paintMode( Gwork,0x02 ) ;                    /*  境界                */
  546.     EGB_writeMode( Gwork,OPAQUE ) ;
  547.  
  548.     if ( Timemode != Dispmode ) {
  549.         disptimeinfo() ;
  550.     }
  551.  
  552.     switch ( Timemode ) {
  553.     /*  ● 演奏中の曲内経過時間 ●    */
  554.     case TM_TR_CLOCK :
  555.         if ( Flg.prgchk ) {                        /*  プログラム確認                */
  556. /*-----------------------------------------------------------------------------
  557. **    プログラム確認
  558. -----------------------------------------------------------------------------*/
  559.             cmp = CDDA_cmptime(    (signed char)CDDA_CLOCK_program.min,
  560.                                 (signed char)CDDA_CLOCK_program.sec,
  561.                                 ZERO,
  562.                                 Dispmin,Dispsec,ZERO ) ;
  563.             if ( !cmp ) break ;
  564.             Dispmin = CDDA_CLOCK_program.min ;
  565.             Dispsec = CDDA_CLOCK_program.sec ;
  566.             sprintf( Textbuf," %3d.%02d",
  567.                     CDDA_CLOCK_program.min,CDDA_CLOCK_program.sec ) ;
  568.         } else {                                /*  通常表示                */
  569. /*-----------------------------------------------------------------------------
  570. **    演奏中曲時間
  571. -----------------------------------------------------------------------------*/
  572.             cmp = CDDA_cmptime(    (signed char)CDDA_CLOCK_nowtrack.min,
  573.                                 (signed char)CDDA_CLOCK_nowtrack.sec,
  574.                                 ZERO,
  575.                                 Dispmin,Dispsec,ZERO ) ;
  576.             if ( !cmp ) break ;
  577.             Dispmin = CDDA_CLOCK_nowtrack.min ;
  578.             Dispsec = CDDA_CLOCK_nowtrack.sec ;
  579.             sprintf( Textbuf," %3d.%02d",
  580.                     CDDA_CLOCK_nowtrack.min,CDDA_CLOCK_nowtrack.sec ) ;
  581.         }
  582.         disptimemouse( FALSE ) ;
  583.         disptext( Gwork,Position[SW_TIME].s.x+8*XCDOT,
  584.                 Position[SW_TIME].s.y+27+YCDOT-1,Textbuf ) ;
  585.         break ;
  586.     /*  ● 演奏中の曲内残り時間 ●    */
  587.     case TM_TR_TIME :
  588.         cmp = CDDA_cmptime(    (signed char)CDDA_TIME_nowtrack.min,
  589.                             (signed char)CDDA_TIME_nowtrack.sec,
  590.                             ZERO,
  591.                             Dispmin,Dispsec,ZERO ) ;
  592.         if ( !cmp ) break ;
  593.         Dispmin = CDDA_TIME_nowtrack.min ;
  594.         Dispsec = CDDA_TIME_nowtrack.sec ;
  595.         sprintf( Textbuf,"-%3d.%02d",
  596.                 CDDA_TIME_nowtrack.min,CDDA_TIME_nowtrack.sec ) ;
  597.         disptimemouse( FALSE ) ;
  598.         disptext( Gwork,Position[SW_TIME].s.x+8*XCDOT,
  599.                 Position[SW_TIME].s.y+27+YCDOT-1,Textbuf ) ;
  600.         break ;
  601.     /*  ● ディスク内経過時間 ●    */
  602.     case TM_DISC_CLOCK :
  603.         cmp = CDDA_cmptime(    (signed char)CDDA_CLOCK_nowdisc.min,
  604.                             (signed char)CDDA_CLOCK_nowdisc.sec,
  605.                             ZERO,
  606.                             Dispmin,Dispsec,ZERO ) ;
  607.         if ( !cmp ) break ;
  608.         Dispmin = CDDA_CLOCK_nowdisc.min ;
  609.         Dispsec = CDDA_CLOCK_nowdisc.sec ;
  610.         sprintf( Textbuf," %3d.%02d",
  611.                 CDDA_CLOCK_nowdisc.min,CDDA_CLOCK_nowdisc.sec ) ;
  612.         disptimemouse( FALSE ) ;
  613.         disptext( Gwork,Position[SW_TIME].s.x+8*XCDOT,
  614.                 Position[SW_TIME].s.y+27+YCDOT-1,Textbuf ) ;
  615.         break ;
  616.     /*  ● ディスク内残り時間 ●    */
  617.     case TM_DISC_TIME :
  618.         cmp = CDDA_cmptime(    (signed char)CDDA_TIME_nowdisc.min,
  619.                             (signed char)CDDA_TIME_nowdisc.sec,
  620.                             ZERO,
  621.                             Dispmin,Dispsec,ZERO ) ;
  622.         if ( !cmp ) break ;
  623.         Dispmin = CDDA_TIME_nowdisc.min ;
  624.         Dispsec = CDDA_TIME_nowdisc.sec ;
  625.         sprintf( Textbuf,"-%3d.%02d",
  626.                 CDDA_TIME_nowdisc.min,CDDA_TIME_nowdisc.sec ) ;
  627.         disptimemouse( FALSE ) ;
  628.         disptext( Gwork,Position[SW_TIME].s.x+8*XCDOT,
  629.                 Position[SW_TIME].s.y+27+YCDOT-1,Textbuf ) ;
  630.     }
  631. }
  632.  
  633. /*******************************  TIME表示  **********************************/
  634. void disptime( int musicno,int mode )
  635. /*=============================================================================
  636. **    時間表示をする.
  637. **
  638. **    < INPUT  > : 曲番号 , 時間表示モード
  639. **    < OUTPUT > : なし
  640. **    < RETURN > : なし
  641. =============================================================================*/
  642. {
  643. /*-----------------------------------------------------------------------------
  644. **    曲番号が音楽でなく データ ならば、何もしないで リターン する.
  645. -----------------------------------------------------------------------------*/
  646.     if ( musicno >= CDDA_INFO_buf.start && musicno <= CDDA_INFO_buf.end ) {
  647.         if ( CDDA_data_check( musicno ) ) return ;
  648.     }
  649.  
  650. /*-----------------------------------------------------------------------------
  651. **    演奏時間の情報は、CDDA_status() をCALLすることによって取得できます.
  652. **
  653. **    演奏情報は、それぞれ・・・
  654. **    CDDA_NOW_status            : 現在の演奏状態
  655. **
  656. **    CDDA_NOW_musicno        : 演奏中の曲番号
  657. **    CDDA_CLOCK_nowtrack        : 演奏中の曲内経過時間
  658. **    CDDA_CLOCK_nowdisc        : 演奏中のトータル経過時間
  659. **    CDDA_TIME_nowtrack        : 演奏中の曲内残り時間
  660. **    CDDA_TIME_nowdisc        : 演奏中のトータル残り時間
  661. **    となっています.
  662. -----------------------------------------------------------------------------*/
  663.  
  664. /*-----------------------------------------------------------------------------
  665. **    曲番号表示
  666. **
  667. **    プログラム設定曲確認中(一定時間保留中)は表示しない.
  668. **    曲番号の表示チェックの結果、時間情報の表示必要なしの時は、そのままリターン.
  669. -----------------------------------------------------------------------------*/
  670.     switch ( mode ) {
  671.     case TM_TR_CLOCK :
  672.     case TM_TR_TIME :
  673.     case TM_DISC_CLOCK :
  674.     case TM_DISC_TIME :
  675.         if ( !Flg.prgchk && Tcount2 < PRG_WAIT ) break ;
  676.         if ( !disptimemusicno( musicno ) ) return ;
  677.         break ;
  678.     case TM_NODISP :
  679.         disptimebox() ;
  680.     }
  681.  
  682. /*-----------------------------------------------------------------------------
  683. **    曲時間表示
  684. **
  685. **    プログラム設定曲確認中(一定時間保留中)は表示しない.
  686. -----------------------------------------------------------------------------*/
  687.     switch ( mode ) {
  688.     case TM_TR_CLOCK :
  689.     case TM_TR_TIME :
  690.     case TM_DISC_CLOCK :
  691.     case TM_DISC_TIME :
  692.         if ( !Flg.prgchk && Tcount2 < PRG_WAIT ) break ;
  693.         disptimeclock() ;
  694.     }
  695.  
  696. /*    ↓↓                        ★★ DEBUG ★★                        ↓↓    */
  697.     if ( CDDA_DEBUG ) {
  698.         EGB_color( Gwork,0,COLOR_TIME ) ;            /*  前景色                */
  699.         EGB_color( Gwork,1,COLOR_SCREEN_BACK ) ;    /*  背景色                */
  700.         EGB_paintMode( Gwork,0x02 ) ;                /*  境界                */
  701.         EGB_writeMode( Gwork,OPAQUE ) ;
  702.         sprintf( Textbuf,"<%2d> %3d.%02d.%02d[-%3d.%02d.%02d] TOTAL:%3d.%02d.%02d[-%3d.%02d.%02d]",CDDA_NOW_musicno,CDDA_CLOCK_nowtrack.min,CDDA_CLOCK_nowtrack.sec,CDDA_CLOCK_nowtrack.frame,CDDA_TIME_nowtrack.min,CDDA_TIME_nowtrack.sec,CDDA_TIME_nowtrack.frame,CDDA_CLOCK_nowdisc.min,CDDA_CLOCK_nowdisc.sec,CDDA_CLOCK_nowdisc.frame,CDDA_TIME_nowdisc.min,CDDA_TIME_nowdisc.sec,CDDA_TIME_nowdisc.frame ) ;
  703.         /*  メッセージ 2段目    */
  704.         disptext( Gwork,PSMsg.x,PSMsg.y+19+YCDOT-1,Textbuf ) ;
  705.     }
  706. /*    ↑↑                        ★★ DEBUG ★★                        ↑↑    */
  707.  
  708. /*-----------------------------------------------------------------------------
  709. **    マウス表示制御
  710. -----------------------------------------------------------------------------*/
  711.     disptimemouse( TRUE ) ;
  712.  
  713. /*-----------------------------------------------------------------------------
  714. **    プログラムによる曲時間確認後の処理
  715. -----------------------------------------------------------------------------*/
  716.     if ( Flg.prgchk ) {
  717.         Flg.prgchk = FALSE ;
  718.         Tcount2    = ZERO ;
  719.     } else {
  720. /*-----------------------------------------------------------------------------
  721. **    ある程度時間がたったら、プログラム確認用のポインタをクリアしておく.
  722. -----------------------------------------------------------------------------*/
  723.         if ( Tcount2 > PRG_WAIT ) {
  724.             CDDA_switch( CDDA_SW_PRG_TOP ) ;
  725.         }
  726.     }
  727. }
  728.  
  729. /*****************************  CHECKボタン描画  *******************************/
  730. void dispcheck( int mode,int sw )
  731. /*=============================================================================
  732. **    CHECK ボタン を表示する.
  733. **
  734. **    < INPUT  > : 演奏モード , スイッチ ON/OFF 状態.
  735. **    < OUTPUT > : なし
  736. **    < RETURN > : なし
  737. **
  738. **    プログラムモード以外では、選択不可の表示とする.
  739. =============================================================================*/
  740. {
  741.     unsigned int    p ;
  742.  
  743.     if ( sw ) {
  744.         if ( Swstat[SW_CHECK] ) return ;
  745.         Swstat[SW_CHECK] = TRUE ;
  746.     } else {
  747.         if ( !Swstat[SW_CHECK] ) return ;
  748.         Swstat[SW_CHECK] = FALSE ;
  749.     }
  750.  
  751.     if ( sw ) {                                    /*  スイッチ ON                    */
  752.         p = (unsigned int)DATA_check1 ;
  753.     } else {                                    /*  スイッチ OFF                */
  754.         p = (unsigned int)DATA_check0 ;
  755.     }
  756.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  757.     EGB_writeMode( Gwork,PSET ) ;
  758.     put( Gwork,Position[SW_CHECK].s.x,Position[SW_CHECK].s.y,
  759.             Position[SW_CHECK].e.x,Position[SW_CHECK].e.y,p,4 ) ;
  760.  
  761.     if ( mode == SW_PROGRAM ) return ;
  762. }
  763.  
  764. /*****************************  CLEARボタン描画  *******************************/
  765. void dispclear( int mode,int sw )
  766. /*=============================================================================
  767. **    CLEAR ボタン を表示する.
  768. **
  769. **    < INPUT  > : 演奏モード , スイッチ ON/OFF 状態.
  770. **    < OUTPUT > : なし
  771. **    < RETURN > : なし
  772. **
  773. **    プログラムモード以外では、選択不可の表示とする.
  774. =============================================================================*/
  775. {
  776.     unsigned int    p ;
  777.  
  778.     if ( sw ) {
  779.         if ( Swstat[SW_CLEAR] ) return ;
  780.         Swstat[SW_CLEAR] = TRUE ;
  781.     } else {
  782.         if ( !Swstat[SW_CLEAR] ) return ;
  783.         Swstat[SW_CLEAR] = FALSE ;
  784.     }
  785.  
  786.     if ( sw ) {                                    /*  スイッチ ON                    */
  787.         p = (unsigned int)DATA_clear1 ;
  788.     } else {                                    /*  スイッチ OFF                */
  789.         p = (unsigned int)DATA_clear0 ;
  790.     }
  791.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  792.     EGB_writeMode( Gwork,PSET ) ;
  793.     put( Gwork,Position[SW_CLEAR].s.x,Position[SW_CLEAR].s.y,
  794.             Position[SW_CLEAR].e.x,Position[SW_CLEAR].e.y,p,4 ) ;
  795.  
  796.     if ( mode == SW_PROGRAM ) return ;
  797. }
  798.  
  799. /****************************  SHUFFLEボタン描画  ******************************/
  800. void dispshuffle( int sw )
  801. /*=============================================================================
  802. **    SHUFFLE ボタン を表示する.
  803. **
  804. **    < INPUT  > : スイッチ ON/OFF 状態.
  805. **    < OUTPUT > : なし
  806. **    < RETURN > : なし
  807. =============================================================================*/
  808. {
  809.     unsigned int    p ;
  810.  
  811.     if ( sw ) {
  812.         if ( Swstat[SW_SHUFFLE] ) return ;
  813.         Swstat[SW_SHUFFLE] = TRUE ;
  814.     } else {
  815.         if ( !Swstat[SW_SHUFFLE] ) return ;
  816.         Swstat[SW_SHUFFLE] = FALSE ;
  817.     }
  818.  
  819.     if ( sw ) {                                    /*  スイッチ ON                    */
  820.         p = (unsigned int)DATA_shuffle1 ;
  821.     } else {                                    /*  スイッチ OFF                */
  822.         p = (unsigned int)DATA_shuffle0 ;
  823.     }
  824.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  825.     EGB_writeMode( Gwork,PSET ) ;
  826.     put( Gwork,Position[SW_SHUFFLE].s.x,Position[SW_SHUFFLE].s.y,
  827.             Position[SW_SHUFFLE].e.x,Position[SW_SHUFFLE].e.y,p,4 ) ;
  828. }
  829.  
  830. /****************************  REPEATボタン描画  *******************************/
  831. void disprepeat( int sw )
  832. /*=============================================================================
  833. **    REPEAT ボタン を表示する.
  834. **
  835. **    < INPUT  > : スイッチ ON/OFF 状態.
  836. **    < OUTPUT > : なし
  837. **    < RETURN > : なし
  838. =============================================================================*/
  839. {
  840.     unsigned int    p ;
  841.  
  842.     if ( sw ) {
  843.         if ( Swstat[SW_REPEAT] ) return ;
  844.         Swstat[SW_REPEAT] = TRUE ;
  845.     } else {
  846.         if ( !Swstat[SW_REPEAT] ) return ;
  847.         Swstat[SW_REPEAT] = FALSE ;
  848.     }
  849.  
  850.     if ( sw ) {                                    /*  スイッチ ON                    */
  851.         p = (unsigned int)DATA_repeat1 ;
  852.     } else {                                    /*  スイッチ OFF                */
  853.         p = (unsigned int)DATA_repeat0 ;
  854.     }
  855.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  856.     EGB_writeMode( Gwork,PSET ) ;
  857.     put( Gwork,Position[SW_REPEAT].s.x,Position[SW_REPEAT].s.y,
  858.             Position[SW_REPEAT].e.x,Position[SW_REPEAT].e.y,p,4 ) ;
  859. }
  860.  
  861. /*****************************  STOPボタン描画  ********************************/
  862. void dispstop( int sw )
  863. /*=============================================================================
  864. **    STOP ボタン を表示する.
  865. **
  866. **    < INPUT  > : スイッチ ON/OFF 状態.
  867. **    < OUTPUT > : なし
  868. **    < RETURN > : なし
  869. =============================================================================*/
  870. {
  871.     unsigned int    p ;
  872.  
  873.     if ( sw ) {
  874.         if ( Swstat[SW_STOP] ) return ;
  875.         Swstat[SW_STOP] = TRUE ;
  876.     } else {
  877.         if ( !Swstat[SW_STOP] ) return ;
  878.         Swstat[SW_STOP] = FALSE ;
  879.     }
  880.  
  881.     if ( sw ) {                                    /*  スイッチ ON                    */
  882.         p = (unsigned int)DATA_stop1 ;
  883.     } else {                                    /*  スイッチ OFF                */
  884.         p = (unsigned int)DATA_stop0 ;
  885.     }
  886.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  887.     EGB_writeMode( Gwork,PSET ) ;
  888.     put( Gwork,Position[SW_STOP].s.x,Position[SW_STOP].s.y,
  889.             Position[SW_STOP].e.x,Position[SW_STOP].e.y,p,4 ) ;
  890. }
  891.  
  892. /*****************************  PLAYボタン描画  ********************************/
  893. void dispplay( int sw )
  894. /*=============================================================================
  895. **    PLAY ボタン を表示する.
  896. **
  897. **    < INPUT  > : スイッチ ON/OFF 状態.
  898. **    < OUTPUT > : なし
  899. **    < RETURN > : なし
  900. =============================================================================*/
  901. {
  902.     unsigned int    p ;
  903.  
  904.     if ( sw ) {
  905.         if ( Swstat[SW_PLAY] ) return ;
  906.         Swstat[SW_PLAY] = TRUE ;
  907.     } else {
  908.         if ( !Swstat[SW_PLAY] ) return ;
  909.         Swstat[SW_PLAY] = FALSE ;
  910.     }
  911.  
  912.     if ( sw ) {                                    /*  スイッチ ON                    */
  913.         p = (unsigned int)DATA_play1 ;
  914.     } else {                                    /*  スイッチ OFF                */
  915.         p = (unsigned int)DATA_play0 ;
  916.     }
  917.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  918.     EGB_writeMode( Gwork,PSET ) ;
  919.     put( Gwork,Position[SW_PLAY].s.x,Position[SW_PLAY].s.y,
  920.             Position[SW_PLAY].e.x,Position[SW_PLAY].e.y,p,4 ) ;
  921. }
  922.  
  923. /****************************  曲戻しボタン描画  *******************************/
  924. void disprewmusic( int sw )
  925. /*=============================================================================
  926. **    曲戻し ボタン を表示する.
  927. **
  928. **    < INPUT  > : スイッチ ON/OFF 状態.
  929. **    < OUTPUT > : なし
  930. **    < RETURN > : なし
  931. =============================================================================*/
  932. {
  933.     unsigned int    p ;
  934.  
  935.     if ( sw ) {
  936.         if ( Swstat[SW_REWMUSIC] ) return ;
  937.         Swstat[SW_REWMUSIC] = TRUE ;
  938.     } else {
  939.         if ( !Swstat[SW_REWMUSIC] ) return ;
  940.         Swstat[SW_REWMUSIC] = FALSE ;
  941.     }
  942.  
  943.     if ( sw ) {                                    /*  スイッチ ON                    */
  944.         p = (unsigned int)DATA_rewmusic1 ;
  945.     } else {                                    /*  スイッチ OFF                */
  946.         p = (unsigned int)DATA_rewmusic0 ;
  947.     }
  948.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  949.     EGB_writeMode( Gwork,PSET ) ;
  950.     put( Gwork,Position[SW_REWMUSIC].s.x,Position[SW_REWMUSIC].s.y,
  951.             Position[SW_REWMUSIC].e.x,Position[SW_REWMUSIC].e.y,p,4 ) ;
  952. }
  953.  
  954. /***************************  時間戻しボタン描画  ******************************/
  955. void disprewtime( int sw )
  956. /*=============================================================================
  957. **    時間戻し ボタン を表示する.
  958. **
  959. **    < INPUT  > : スイッチ ON/OFF 状態.
  960. **    < OUTPUT > : なし
  961. **    < RETURN > : なし
  962. =============================================================================*/
  963. {
  964.     unsigned int    p ;
  965.  
  966.     if ( sw ) {
  967.         if ( Swstat[SW_REWTIME] ) return ;
  968.         Swstat[SW_REWTIME] = TRUE ;
  969.     } else {
  970.         if ( !Swstat[SW_REWTIME] ) return ;
  971.         Swstat[SW_REWTIME] = FALSE ;
  972.     }
  973.  
  974.     if ( sw ) {                                    /*  スイッチ ON                    */
  975.         p = (unsigned int)DATA_rewtime1 ;
  976.     } else {                                    /*  スイッチ OFF                */
  977.         p = (unsigned int)DATA_rewtime0 ;
  978.     }
  979.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  980.     EGB_writeMode( Gwork,PSET ) ;
  981.     put( Gwork,Position[SW_REWTIME].s.x,Position[SW_REWTIME].s.y,
  982.             Position[SW_REWTIME].e.x,Position[SW_REWTIME].e.y,p,4 ) ;
  983. }
  984.  
  985. /*****************************  PAUSEボタン描画  *******************************/
  986. void disppause( int sw )
  987. /*=============================================================================
  988. **    PAUSE ボタン を表示する.
  989. **
  990. **    < INPUT  > : スイッチ ON/OFF 状態.
  991. **    < OUTPUT > : なし
  992. **    < RETURN > : なし
  993. =============================================================================*/
  994. {
  995.     unsigned int    p ;
  996.  
  997.     if ( sw ) {
  998.         if ( Swstat[SW_PAUSE] ) return ;
  999.         Swstat[SW_PAUSE] = TRUE ;
  1000.     } else {
  1001.         if ( !Swstat[SW_PAUSE] ) return ;
  1002.         Swstat[SW_PAUSE] = FALSE ;
  1003.     }
  1004.  
  1005.     if ( sw ) {                                    /*  スイッチ ON                    */
  1006.         p = (unsigned int)DATA_pause1 ;
  1007.     } else {                                    /*  スイッチ OFF                */
  1008.         p = (unsigned int)DATA_pause0 ;
  1009.     }
  1010.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  1011.     EGB_writeMode( Gwork,PSET ) ;
  1012.     put( Gwork,Position[SW_PAUSE].s.x,Position[SW_PAUSE].s.y,
  1013.             Position[SW_PAUSE].e.x,Position[SW_PAUSE].e.y,p,4 ) ;
  1014. }
  1015.  
  1016. /***************************  時間送りボタン描画  ******************************/
  1017. void dispfftime( int sw )
  1018. /*=============================================================================
  1019. **    時間送り ボタン を表示する.
  1020. **
  1021. **    < INPUT  > : スイッチ ON/OFF 状態.
  1022. **    < OUTPUT > : なし
  1023. **    < RETURN > : なし
  1024. =============================================================================*/
  1025. {
  1026.     unsigned int    p ;
  1027.  
  1028.     if ( sw ) {
  1029.         if ( Swstat[SW_FFTIME] ) return ;
  1030.         Swstat[SW_FFTIME] = TRUE ;
  1031.     } else {
  1032.         if ( !Swstat[SW_FFTIME] ) return ;
  1033.         Swstat[SW_FFTIME] = FALSE ;
  1034.     }
  1035.  
  1036.     if ( sw ) {                                    /*  スイッチ ON                    */
  1037.         p = (unsigned int)DATA_fftime1 ;
  1038.     } else {                                    /*  スイッチ OFF                */
  1039.         p = (unsigned int)DATA_fftime0 ;
  1040.     }
  1041.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  1042.     EGB_writeMode( Gwork,PSET ) ;
  1043.     put( Gwork,Position[SW_FFTIME].s.x,Position[SW_FFTIME].s.y,
  1044.             Position[SW_FFTIME].e.x,Position[SW_FFTIME].e.y,p,4 ) ;
  1045. }
  1046.  
  1047. /****************************  曲送りボタン描画  *******************************/
  1048. void dispffmusic( int sw )
  1049. /*=============================================================================
  1050. **    曲送り ボタン を表示する.
  1051. **
  1052. **    < INPUT  > : スイッチ ON/OFF 状態.
  1053. **    < OUTPUT > : なし
  1054. **    < RETURN > : なし
  1055. =============================================================================*/
  1056. {
  1057.     unsigned int    p ;
  1058.  
  1059.     if ( sw ) {
  1060.         if ( Swstat[SW_FFMUSIC] ) return ;
  1061.         Swstat[SW_FFMUSIC] = TRUE ;
  1062.     } else {
  1063.         if ( !Swstat[SW_FFMUSIC] ) return ;
  1064.         Swstat[SW_FFMUSIC] = FALSE ;
  1065.     }
  1066.  
  1067.     if ( sw ) {                                    /*  スイッチ ON                    */
  1068.         p = (unsigned int)DATA_ffmusic1 ;
  1069.     } else {                                    /*  スイッチ OFF                */
  1070.         p = (unsigned int)DATA_ffmusic0 ;
  1071.     }
  1072.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  1073.     EGB_writeMode( Gwork,PSET ) ;
  1074.     put( Gwork,Position[SW_FFMUSIC].s.x,Position[SW_FFMUSIC].s.y,
  1075.             Position[SW_FFMUSIC].e.x,Position[SW_FFMUSIC].e.y,p,4 ) ;
  1076. }
  1077.  
  1078. /****************************  PROGRAMボタン描画  ******************************/
  1079. void dispprogram( int sw )
  1080. /*=============================================================================
  1081. **    PROGRAMモード ボタン を表示する.
  1082. **
  1083. **    < INPUT  > : スイッチ ON/OFF 状態.
  1084. **    < OUTPUT > : なし
  1085. **    < RETURN > : なし
  1086. **
  1087. **    他の演奏モードとの排他表示をする必要があります.
  1088. =============================================================================*/
  1089. {
  1090.     unsigned int    p ;
  1091.  
  1092.     if ( sw ) {
  1093.         if ( Swstat[SW_PROGRAM] ) return ;
  1094.         Swstat[SW_PROGRAM] = TRUE ;
  1095.     } else {
  1096.         if ( !Swstat[SW_PROGRAM] ) return ;
  1097.         Swstat[SW_PROGRAM] = FALSE ;
  1098.     }
  1099.  
  1100.     if ( sw ) {                                        /*  スイッチ ON            */
  1101.         p = (unsigned int)DATA_mode1 ;
  1102.         EGB_color( Gwork,2,COLOR_MODE_PROGRAM ) ;    /*  面塗り色        */
  1103.     } else {                                        /*  スイッチ OFF        */
  1104.         p = (unsigned int)DATA_mode0 ;
  1105.     }
  1106.  
  1107.     EGB_paintMode( Gwork,0x02 ) ;                    /*  境界            */
  1108.     EGB_writeMode( Gwork,PSET ) ;
  1109.     put( Gwork,Position[SW_PROGRAM].s.x,Position[SW_PROGRAM].s.y,
  1110.             Position[SW_PROGRAM].e.x,Position[SW_PROGRAM].e.y,p,4 ) ;
  1111.  
  1112.     if ( sw ) {
  1113.         EGB_paintMode( Gwork,0x20 ) ;            /*  面塗り                    */
  1114.         box( Gwork,Position[SW_PROGRAM].s.x+1,Position[SW_PROGRAM].s.y+1,
  1115.                 Position[SW_PROGRAM].e.x-1,Position[SW_PROGRAM].e.y-1 ) ;
  1116.     }
  1117. }
  1118.  
  1119. /****************************  SINGLEボタン描画  *******************************/
  1120. void dispsingle( int sw )
  1121. /*=============================================================================
  1122. **    SINGLEモード ボタン を表示する.
  1123. **
  1124. **    < INPUT  > : スイッチ ON/OFF 状態.
  1125. **    < OUTPUT > : なし
  1126. **    < RETURN > : なし
  1127. **
  1128. **    他の演奏モードとの排他表示をする必要があります.
  1129. =============================================================================*/
  1130. {
  1131.     unsigned int    p ;
  1132.  
  1133.     if ( sw ) {
  1134.         if ( Swstat[SW_SINGLE] ) return ;
  1135.         Swstat[SW_SINGLE] = TRUE ;
  1136.     } else {
  1137.         if ( !Swstat[SW_SINGLE] ) return ;
  1138.         Swstat[SW_SINGLE] = FALSE ;
  1139.     }
  1140.  
  1141.     if ( sw ) {                                        /*  スイッチ ON            */
  1142.         p = (unsigned int)DATA_mode1 ;
  1143.         EGB_color( Gwork,2,COLOR_MODE_SINGLE ) ;    /*  面塗り色        */
  1144.     } else {                                        /*  スイッチ OFF        */
  1145.         p = (unsigned int)DATA_mode0 ;
  1146.     }
  1147.  
  1148.     EGB_paintMode( Gwork,0x02 ) ;                    /*  境界            */
  1149.     EGB_writeMode( Gwork,PSET ) ;
  1150.     put( Gwork,Position[SW_SINGLE].s.x,Position[SW_SINGLE].s.y,
  1151.             Position[SW_SINGLE].e.x,Position[SW_SINGLE].e.y,p,4 ) ;
  1152.  
  1153.     if ( sw ) {
  1154.         EGB_paintMode( Gwork,0x20 ) ;            /*  面塗り                    */
  1155.         box( Gwork,Position[SW_SINGLE].s.x+1,Position[SW_SINGLE].s.y+1,
  1156.                 Position[SW_SINGLE].e.x-1,Position[SW_SINGLE].e.y-1 ) ;
  1157.     }
  1158. }
  1159.  
  1160. /****************************  CONTINUEボタン描画  *****************************/
  1161. void dispcontinue( int sw )
  1162. /*=============================================================================
  1163. **    CONTINUEモード ボタン を表示する.
  1164. **
  1165. **    < INPUT  > : スイッチ ON/OFF 状態.
  1166. **    < OUTPUT > : なし
  1167. **    < RETURN > : なし
  1168. **
  1169. **    他の演奏モードとの排他表示をする必要があります.
  1170. =============================================================================*/
  1171. {
  1172.     unsigned int    p ;
  1173.  
  1174.     if ( sw ) {
  1175.         if ( Swstat[SW_CONTINUE] ) return ;
  1176.         Swstat[SW_CONTINUE] = TRUE ;
  1177.     } else {
  1178.         if ( !Swstat[SW_CONTINUE] ) return ;
  1179.         Swstat[SW_CONTINUE] = FALSE ;
  1180.     }
  1181.  
  1182.     if ( sw ) {                                        /*  スイッチ ON            */
  1183.         p = (unsigned int)DATA_mode1 ;
  1184.         EGB_color( Gwork,2,COLOR_MODE_CONTINUE ) ;    /*  面塗り色        */
  1185.     } else {                                        /*  スイッチ OFF        */
  1186.         p = (unsigned int)DATA_mode0 ;
  1187.     }
  1188.  
  1189.     EGB_paintMode( Gwork,0x02 ) ;                    /*  境界            */
  1190.     EGB_writeMode( Gwork,PSET ) ;
  1191.     put( Gwork,Position[SW_CONTINUE].s.x,Position[SW_CONTINUE].s.y,
  1192.             Position[SW_CONTINUE].e.x,Position[SW_CONTINUE].e.y,p,4 ) ;
  1193.  
  1194.     if ( sw ) {
  1195.         EGB_paintMode( Gwork,0x20 ) ;            /*  面塗り                    */
  1196.         box( Gwork,Position[SW_CONTINUE].s.x+1,Position[SW_CONTINUE].s.y+1,
  1197.                 Position[SW_CONTINUE].e.x-1,Position[SW_CONTINUE].e.y-1 ) ;
  1198.     }
  1199. }
  1200.  
  1201. /***************************  電子ボリューム BOX 描画  ***************************/
  1202. void dispelevolbox( int sw )
  1203. /*=============================================================================
  1204. **    電子ボリューム BOX を表示する.
  1205. **
  1206. **    < INPUT  > : スイッチ ON/OFF 状態.
  1207. **    < OUTPUT > : なし
  1208. **    < RETURN > : なし
  1209. =============================================================================*/
  1210. {
  1211.     unsigned int    p ;
  1212.  
  1213.     if ( sw ) {
  1214.         if ( Swstat[SW_ELEVOL] ) return ;
  1215.         Swstat[SW_ELEVOL] = TRUE ;
  1216.     } else {
  1217.         if ( !Swstat[SW_ELEVOL] ) return ;
  1218.         Swstat[SW_ELEVOL] = FALSE ;
  1219.     }
  1220.  
  1221.     if ( sw ) {                                    /*  スイッチ ON                    */
  1222.         p = (unsigned int)DATA_elevol ;
  1223.     } else {                                    /*  スイッチ OFF                */
  1224.         p = (unsigned int)DATA_elevol ;
  1225.     }
  1226.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  1227.     EGB_writeMode( Gwork,PSET ) ;
  1228.     put( Gwork,Position[SW_ELEVOL].s.x,Position[SW_ELEVOL].s.y,
  1229.             Position[SW_ELEVOL].e.x,Position[SW_ELEVOL].e.y,p,4 ) ;
  1230. }
  1231.  
  1232. /*****************************  電子ボリューム表示  ******************************/
  1233. void dispelevol( void )
  1234. /*=============================================================================
  1235. **    電子ボリュームのレベル表示をする.
  1236. **
  1237. **    < INPUT  > : なし
  1238. **    < OUTPUT > : なし
  1239. **    < RETURN > : なし
  1240. =============================================================================*/
  1241. {
  1242.     static int    vol = ZERO ;
  1243.     int        c ;
  1244.     int        ps, pe ;
  1245.  
  1246.     EGB_paintMode( Gwork,0x20 ) ;                /*  面塗り                    */
  1247.     EGB_writeMode( Gwork,PSET ) ;
  1248.  
  1249. /*-----------------------------------------------------------------------------
  1250. **    現在の表示状態との差分を表示する.
  1251. **    ただし、電子ボリュームの値が MAX / MIN / MUTE の時 が 絡んだ場合には、
  1252. **    表示し直す.
  1253. -----------------------------------------------------------------------------*/
  1254.  
  1255.     if ( Flg.mute ) {                                    /*  ミュート中            */
  1256. /*-----------------------------------------------------------------------------
  1257. **    => MUTE 表示
  1258. **    MUTE 表示中は、vol = -1 としておく.
  1259. -----------------------------------------------------------------------------*/
  1260.         EGB_color( Gwork,2,COLOR_EVOL_MUTE ) ;    /*  面塗り色                */
  1261.         box( Gwork,Position[SW_ELEVOL].s.x+1,Position[SW_ELEVOL].s.y+1,
  1262.                 Position[SW_ELEVOL].e.x-1,Position[SW_ELEVOL].e.y-1 ) ;
  1263.         vol = -1 ;
  1264.  
  1265.     } else {
  1266. /*-----------------------------------------------------------------------------
  1267. **    現在の表示状態と変化なければ、何もしない.
  1268. -----------------------------------------------------------------------------*/
  1269.         if ( vol == Evol ) return ;
  1270. /*-----------------------------------------------------------------------------
  1271. **    => MAX / MIN 表示
  1272. -----------------------------------------------------------------------------*/
  1273.         if ( Evol >= ELEVOL_MAX ) {                        /*  電子ボリュームがMAX    */
  1274.             EGB_color( Gwork,2,COLOR_EVOL_MAX ) ;    /*  面塗り色            */
  1275.             box( Gwork,Position[SW_ELEVOL].s.x+1,Position[SW_ELEVOL].s.y+1,
  1276.                     Position[SW_ELEVOL].e.x-1,Position[SW_ELEVOL].e.y-1 ) ;
  1277.         } else if ( Evol <= ELEVOL_MIN ) {                /*  電子ボリュームがMIN    */
  1278.             EGB_color( Gwork,2,COLOR_EVOL_MIN ) ;    /*  面塗り色            */
  1279.             box( Gwork,Position[SW_ELEVOL].s.x+1,Position[SW_ELEVOL].s.y+1,
  1280.                     Position[SW_ELEVOL].e.x-1,Position[SW_ELEVOL].e.y-1 ) ;
  1281.         } else {                                        /*  可変中            */                if ( vol >= ELEVOL_MAX || vol <= ELEVOL_MIN || vol == -1 ) {
  1282. /*-----------------------------------------------------------------------------
  1283. **    MAX / MIN / MUTE 表示中 => 現在のボリュームを表示
  1284. -----------------------------------------------------------------------------*/
  1285.                 EGB_color( Gwork,2,COLOR_EVOL_BACK ) ;    /*  面塗り色        */
  1286.                 box( Gwork,Position[SW_ELEVOL].s.x+1,Position[SW_ELEVOL].s.y+1,
  1287.                         Position[SW_ELEVOL].e.x-1,Position[SW_ELEVOL].e.y-1 ) ;
  1288.                 EGB_color( Gwork,2,COLOR_EVOL ) ;        /*  面塗り色        */
  1289.                 if ( Evol > 7 ) {
  1290.                     for ( c=0; c<29; c++ ) {
  1291.                         if ( (Evol-8) / 4 >= c ) {
  1292.                             box( Gwork,Position[SW_ELEVOL].s.x+1+c*3,
  1293.                                     Position[SW_ELEVOL].s.y+1,
  1294.                                     Position[SW_ELEVOL].s.x+2+c*3,
  1295.                                     Position[SW_ELEVOL].e.y-1 ) ;
  1296.                         }
  1297.                     }
  1298.                 }
  1299.             } else {
  1300. /*-----------------------------------------------------------------------------
  1301. **    可変表示中 => 差分を表示
  1302. -----------------------------------------------------------------------------*/
  1303.                 if ( Evol < vol ) {
  1304.                     EGB_color( Gwork,2,COLOR_EVOL_BACK ) ;    /*  面塗り色    */
  1305.                     if ( Evol < 8 ) {
  1306.                         ps = ZERO ;
  1307.                     } else {
  1308.                         ps = ( Evol - 8 ) / 4 * 3 ;
  1309.                     }
  1310.                     pe = ( vol - 8 ) / 4 * 3 ;
  1311.                     c  = Position[SW_ELEVOL].e.x - Position[SW_ELEVOL].s.x ;
  1312.                     if ( pe + 3 > c ) pe = c - 3 ;
  1313.                     box( Gwork,Position[SW_ELEVOL].s.x+1+ps,
  1314.                             Position[SW_ELEVOL].s.y+1,
  1315.                             Position[SW_ELEVOL].s.x+2+pe,
  1316.                             Position[SW_ELEVOL].e.y-1 ) ;
  1317.                 } else {
  1318.                     EGB_color( Gwork,2,COLOR_EVOL ) ;        /*  面塗り色    */
  1319.                     if ( Evol > 7 ) {
  1320.                         pe = ( vol - 8 ) / 4 ;
  1321.                         if ( pe < ZERO ) pe = ZERO ;
  1322.                         for ( c=pe; c<29; c++ ) {
  1323.                             if ( (Evol-8) / 4 >= c ) {
  1324.                                 box( Gwork,Position[SW_ELEVOL].s.x+1+c*3,
  1325.                                         Position[SW_ELEVOL].s.y+1,
  1326.                                         Position[SW_ELEVOL].s.x+2+c*3,
  1327.                                         Position[SW_ELEVOL].e.y-1 ) ;
  1328.                             }
  1329.                         }
  1330.                     }
  1331.                 }
  1332.             }
  1333.         }
  1334.         vol = Evol ;
  1335.     }
  1336. }
  1337.  
  1338. /*****************************  スイッチボタン描画  ********************************/
  1339. void dispword( void )
  1340. /*=============================================================================
  1341. **    各種ボタン を表示する.
  1342. **
  1343. **    < INPUT  > : なし
  1344. **    < OUTPUT > : なし
  1345. **    < RETURN > : なし
  1346. =============================================================================*/
  1347. {
  1348.     unsigned int    p ;
  1349.  
  1350.     EGB_color( Gwork,0,COLOR_SWITCH_WORD ) ;
  1351.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  1352.     EGB_writeMode( Gwork,PSET ) ;
  1353.  
  1354.     p = (unsigned int)WORD_exit ;
  1355.     put( Gwork,Position[SW_EXIT].s.x+1,Position[SW_EXIT].e.y+3,
  1356.             Position[SW_EXIT].e.x+1,Position[SW_EXIT].e.y+3+6,p,1 ) ;
  1357.  
  1358.     p = (unsigned int)WORD_program ;
  1359.     put( Gwork,Position[SW_PROGRAM].s.x,Position[SW_PROGRAM].e.y+3,
  1360.             Position[SW_PROGRAM].e.x,Position[SW_PROGRAM].e.y+3+6,p,1 ) ;
  1361.  
  1362.     p = (unsigned int)WORD_single ;
  1363.     put( Gwork,Position[SW_SINGLE].s.x,Position[SW_SINGLE].e.y+3,
  1364.             Position[SW_SINGLE].e.x,Position[SW_SINGLE].e.y+3+6,p,1 ) ;
  1365.  
  1366.     p = (unsigned int)WORD_continue ;
  1367.     put( Gwork,Position[SW_CONTINUE].s.x,Position[SW_CONTINUE].e.y+3,
  1368.             Position[SW_CONTINUE].e.x,Position[SW_CONTINUE].e.y+3+6,p,1 ) ;
  1369. }
  1370.  
  1371. /*****************************  スイッチボタン描画  ********************************/
  1372. void dispswitch( void )
  1373. /*=============================================================================
  1374. **    各種ボタン を表示する.
  1375. **
  1376. **    < INPUT  > : なし
  1377. **    < OUTPUT > : なし
  1378. **    < RETURN > : なし
  1379. =============================================================================*/
  1380. {
  1381.     dispexit( FALSE ) ;
  1382.     disptime( ZERO,TM_NODISP ) ;
  1383.     dispcheck( SW_CONTINUE,FALSE ) ;
  1384.     dispclear( SW_CONTINUE,FALSE ) ;
  1385.     dispshuffle( FALSE ) ;
  1386.     disprepeat( FALSE ) ;
  1387.     dispstop( FALSE ) ;
  1388.     dispplay( FALSE ) ;
  1389.     disprewmusic( FALSE ) ;
  1390.     disprewtime( FALSE ) ;
  1391.     disppause( FALSE ) ;
  1392.     dispfftime( FALSE ) ;
  1393.     dispffmusic( FALSE ) ;
  1394.     dispprogram( FALSE ) ;
  1395.     dispsingle( FALSE ) ;
  1396.     Swstat[SW_CONTINUE] = FALSE ;
  1397.     dispcontinue( TRUE ) ;
  1398.     dispword() ;
  1399.     dispelevolbox( FALSE ) ;
  1400.     dispelevol() ;
  1401. }
  1402.  
  1403. /*****************************  曲情報の選択表示  ****************************/
  1404. void dispselectmusicno( int no )
  1405. /*=============================================================================
  1406. **    指定された曲番号の情報を XOR 表示する.
  1407. **
  1408. **    < INPUT  > : 曲番号
  1409. **    < OUTPUT > : なし
  1410. **    < RETURN > : なし
  1411. **
  1412. **    この関数を 2回 CALL すれば、元の表示状態に戻ります.
  1413. =============================================================================*/
  1414. {
  1415.     int        xs, ys ;
  1416.     char    msw ;
  1417.  
  1418.     if ( no ) {
  1419.         if ( CDDA_NOW_status == CDDA_STAT_NOTREADY ) return ;
  1420.         if ( ( CDDA_INFO_buf.start > no || no > CDDA_INFO_buf.end ) &&
  1421.                 no != SW_TOTAL ) return ;
  1422.         if ( no < 1 ) return ;
  1423.         if ( no == XORno ) return ;
  1424.     } else {
  1425.         if ( !XORno ) return ;
  1426.     }
  1427.  
  1428.     msw = Flg.mouse ;
  1429.     if ( msw ) dispmouse( FALSE ) ;
  1430.  
  1431.     EGB_writeMode( Gwork,XOR ) ;
  1432.     EGB_color( Gwork,2,COLOR_XOR ) ;        /*  面塗り色                */
  1433.     EGB_paintMode( Gwork,0x20 ) ;            /*  面塗り                    */
  1434.  
  1435.     if ( XORno ) {
  1436.         xs = PSInf.x + ((XORno-1)/20)*121 + 1 ;
  1437.         ys = (PSInf.y+YCDOT+1) + ((XORno-1)%20)*(YCDOT+1) + 1 ;
  1438.         box( Gwork,xs,ys,xs+119,ys+YCDOT-1 ) ;
  1439.     }
  1440.  
  1441.     if ( no ) {
  1442.         xs = PSInf.x + ((no-1)/20)*121 + 1 ;
  1443.         ys = (PSInf.y+YCDOT+1) + ((no-1)%20)*(YCDOT+1) + 1 ;
  1444.         box( Gwork,xs,ys,xs+119,ys+YCDOT-1 ) ;
  1445.     }
  1446.  
  1447.     if ( msw ) dispmouse( TRUE ) ;
  1448.     XORno = no ;
  1449. }
  1450.  
  1451. /*******************************  曲情報の表示  ******************************/
  1452. void dispmusicno( int no,int sw )
  1453. /*=============================================================================
  1454. **    指定された曲番号の情報を表示する.
  1455. **
  1456. **    < INPUT  > : 曲番号
  1457. **               : スイッチが 真値 ならば演奏前の色で、偽値 ならば演奏後の色で表示.
  1458. **    < OUTPUT > : なし
  1459. **    < RETURN > : なし
  1460. =============================================================================*/
  1461. {
  1462.     int        xs, ys ;
  1463.  
  1464.     if ( CDDA_NOW_status == CDDA_STAT_NOTREADY ) return ;
  1465.     if ( ( CDDA_INFO_buf.start > no || no > CDDA_INFO_buf.end ) &&
  1466.             no != SW_TOTAL ) return ;
  1467.     if ( no < 1 ) return ;
  1468.     if ( no != SW_TOTAL ) {
  1469.         if ( Infstat[no-1] && sw ) return ;
  1470.         if ( !Infstat[no-1] && !sw ) return ;
  1471.         Infstat[no-1] = sw ;
  1472.     }
  1473.  
  1474.     dispselectmusicno( ZERO ) ;
  1475.  
  1476.     EGB_paintMode( Gwork,0x02 ) ;            /*  境界                    */
  1477.     EGB_writeMode( Gwork,OPAQUE ) ;
  1478.  
  1479.     xs = PSInf.x + ((no-1)/20)*121 + 1 ;
  1480.     ys = (PSInf.y+YCDOT+1) + ((no-1)%20)*(YCDOT+1) + 1 ;
  1481.     if ( sw ) {                                /*  選択された時の表示        */
  1482.         EGB_color( Gwork,0,COLOR_INFO_ON ) ;    /*  前景色                */
  1483.     } else {                                /*  演奏済表示                */
  1484.         EGB_color( Gwork,0,COLOR_INFO_OFF ) ;    /*  前景色                */
  1485.     }
  1486.     if ( CDDA_data_check( no ) ) {            /*  データ                    */
  1487.         EGB_color( Gwork,0,COLOR_INFO_DATA ) ;
  1488.     }
  1489.  
  1490.     EGB_color( Gwork,1,COLOR_INFO_BACK ) ;        /*  背景色                */
  1491.     if ( no == SW_TOTAL ) {
  1492.         EGB_color( Gwork,0,COLOR_INFO_TOTAL ) ;
  1493.         sprintf( Textbuf," ★ %2d分%02d秒%02d ",
  1494.                 CDDA_TIME_music.min,
  1495.                 CDDA_TIME_music.sec,
  1496.                 CDDA_TIME_music.frame ) ;
  1497.     } else {
  1498.         sprintf( Textbuf," %02d %2d分%02d秒%02d ",
  1499.                 no,CDDA_TIME_track[no-1].min,
  1500.                 CDDA_TIME_track[no-1].sec,
  1501.                 CDDA_TIME_track[no-1].frame ) ;
  1502.     }
  1503.     disptext( Gwork,xs,ys+YCDOT-1,Textbuf ) ;
  1504. }
  1505.  
  1506. /*************************  イベント選択時の表示チェック  ***************************/
  1507. void dispswitch_check( int swno )
  1508. /*=============================================================================
  1509. **    スイッチ表示の排他チェックをする.(他のスイッチを消す)
  1510. **
  1511. **    < INPUT  > : スイッチ番号
  1512. **    < OUTPUT > : なし
  1513. **    < RETURN > : なし
  1514. =============================================================================*/
  1515. {
  1516.     switch ( swno ) {
  1517.     case SW_EXIT :
  1518.         dispplay( FALSE ) ;
  1519.         disppause( FALSE ) ;
  1520.         disptime( ZERO,TM_NODISP ) ;
  1521.         break ;
  1522.     case SW_TIME :
  1523.     case SW_CHECK :
  1524.     case SW_CLEAR :
  1525.         break ;
  1526.     case SW_SHUFFLE :
  1527.         disptime( ZERO,TM_NODISP ) ;
  1528.         break ;
  1529.     case SW_REPEAT :
  1530.         break ;
  1531.     case SW_STOP :
  1532.         disptime( ZERO,TM_NODISP ) ;
  1533.         dispshuffle( FALSE ) ;
  1534.         dispplay( FALSE ) ;
  1535.         disppause( FALSE ) ;
  1536.         break ;
  1537.     case SW_PLAY :
  1538.         disppause( FALSE ) ;
  1539.         if ( !Flg.shuffle ) dispshuffle( FALSE ) ;
  1540.         break ;
  1541.     case SW_REWMUSIC :
  1542.         break ;
  1543.     case SW_REWTIME :
  1544.         break ;
  1545.     case SW_PAUSE :
  1546.         break ;
  1547.     case SW_FFTIME :
  1548.         break ;
  1549.     case SW_FFMUSIC :
  1550.         break ;
  1551.     case SW_PROGRAM :
  1552.         dispsingle( FALSE ) ;
  1553.         dispcontinue( FALSE ) ;
  1554.         dispcheck( SW_PROGRAM,FALSE ) ;
  1555.         dispclear( SW_PROGRAM,FALSE ) ;
  1556.         break ;
  1557.     case SW_SINGLE :
  1558.         dispprogram( FALSE ) ;
  1559.         dispcontinue( FALSE ) ;
  1560.         dispcheck( SW_SINGLE,FALSE ) ;
  1561.         dispclear( SW_SINGLE,FALSE ) ;
  1562.         break ;
  1563.     case SW_CONTINUE :
  1564.         dispprogram( FALSE ) ;
  1565.         dispsingle( FALSE ) ;
  1566.         dispcheck( SW_CONTINUE,FALSE ) ;
  1567.         dispclear( SW_CONTINUE,FALSE ) ;
  1568.     }
  1569. }
  1570.  
  1571. /***************************  イベント選択時の表示  *****************************/
  1572. void dispevent( int no,int sw )
  1573. /*=============================================================================
  1574. **    マウスがクリックされた時に対応するイベントをチェックする.
  1575. **
  1576. **    < INPUT  > : イベント番号(SWVAL+スイッチ番号) or 曲番号
  1577. **               : ON(真値) か OFF(偽値) => 曲番号の場合は演奏済でないか?
  1578. **    < OUTPUT > : なし
  1579. **    < RETURN > : なし
  1580. =============================================================================*/
  1581. {
  1582.     int        c ;
  1583.  
  1584.     if ( no >= SWVAL ) {
  1585. /*
  1586. **    スイッチ
  1587. */
  1588.         if ( sw ) dispswitch_check( no-SWVAL ) ;
  1589.         switch ( no-SWVAL ) {
  1590.         case SW_EXIT :
  1591.             dispexit( sw ) ;
  1592.             break ;
  1593.         case SW_TIME :
  1594.             break ;
  1595.         case SW_CHECK :
  1596.             dispcheck( Playmode,sw ) ;
  1597.             break ;
  1598.         case SW_CLEAR :
  1599.             dispclear( Playmode,sw ) ;
  1600.             break ;
  1601.         case SW_SHUFFLE :
  1602.             dispshuffle( sw ) ;
  1603.             break ;
  1604.         case SW_REPEAT :
  1605.             disprepeat( sw ) ;
  1606.             break ;
  1607.         case SW_STOP :
  1608.             dispstop( sw ) ;
  1609.             break ;
  1610.         case SW_PLAY :
  1611.             dispplay( sw ) ;
  1612.             break ;
  1613.         case SW_REWMUSIC :
  1614.             disprewmusic( sw ) ;
  1615.             break ;
  1616.         case SW_REWTIME :
  1617.             disprewtime( sw ) ;
  1618.             break ;
  1619.         case SW_PAUSE :
  1620.             disppause( sw ) ;
  1621.             break ;
  1622.         case SW_FFTIME :
  1623.             dispfftime( sw ) ;
  1624.             break ;
  1625.         case SW_FFMUSIC :
  1626.             dispffmusic( sw ) ;
  1627.             break ;
  1628.         case SW_PROGRAM :
  1629.             Swstat[SW_CHECK] = TRUE ;
  1630.             Swstat[SW_CLEAR] = TRUE ;
  1631.             dispswitch_check( SW_PROGRAM ) ;
  1632.             dispprogram( TRUE ) ;
  1633.             break ;
  1634.         case SW_SINGLE :
  1635.             Swstat[SW_CHECK] = TRUE ;
  1636.             Swstat[SW_CLEAR] = TRUE ;
  1637.             dispswitch_check( SW_SINGLE ) ;
  1638.             dispsingle( TRUE ) ;
  1639.             break ;
  1640.         case SW_CONTINUE :
  1641.             Swstat[SW_CHECK] = TRUE ;
  1642.             Swstat[SW_CLEAR] = TRUE ;
  1643.             dispswitch_check( SW_CONTINUE ) ;
  1644.             dispcontinue( TRUE ) ;
  1645.             break ;
  1646.         case SW_ELEVOL :
  1647.             if ( Mosx < Position[SW_ELEVOL].s.x ) {            /*  MIN        */
  1648.                 Evol = ELEVOL_MIN ;
  1649.             } else if ( Mosx > Position[SW_ELEVOL].e.x ) {    /*  MAX        */
  1650.                 Evol = ELEVOL_MAX ;
  1651.             } else {                                        /*  VAL        */
  1652.                 c    = ( Mosx - Position[SW_ELEVOL].s.x ) / 3 ;
  1653.                 Evol = ( c + 2 ) * 4 ;
  1654.             }
  1655.             dispelevol() ;
  1656.         }
  1657.     } else {
  1658. /*
  1659. **    曲情報
  1660. */
  1661.         if ( sw ) {                                /*  選択された時の表示        */
  1662.             dispselectmusicno( no ) ;
  1663.         } else {                                /*  演奏済表示                */
  1664.             dispmusicno( no,FALSE ) ;
  1665.         }
  1666.     }
  1667. }
  1668.  
  1669. /*******************************  TOC 情報クリア  ******************************/
  1670. void disptocclear( void )
  1671. /*=============================================================================
  1672. **    曲情報表示領域をクリアする.
  1673. **
  1674. **    < INPUT  > : なし
  1675. **    < OUTPUT > : なし
  1676. **    < RETURN > : なし
  1677. =============================================================================*/
  1678. {
  1679.     int        c ;
  1680.  
  1681.     Flg_disptoc = FALSE ;
  1682.  
  1683. /*-----------------------------------------------------------------------------
  1684. **    BOX 描画 ( TITLE 部分を除く )
  1685. -----------------------------------------------------------------------------*/
  1686.     EGB_color( Gwork,0,COLOR_INFO_BOX0 ) ;    /*  前景色                    */
  1687.     EGB_color( Gwork,2,COLOR_INFO_BACK ) ;    /*  面塗り色                */
  1688.     EGB_paintMode( Gwork,0x22 ) ;            /*  面塗り                    */
  1689.     EGB_writeMode( Gwork,PSET ) ;
  1690.     box( Gwork,PSInf.x,PSInf.y+YCDOT+1,
  1691.             PSInf.x+SZInf.x-1,PSInf.y+SZInf.y-1 ) ;
  1692.  
  1693.     EGB_paintMode( Gwork,0x02 ) ;            /*  境界                    */
  1694.  
  1695.     EGB_color( Gwork,0,COLOR_INFO_BOX1 ) ;    /*  前景色                    */
  1696.     line( Gwork,PSInf.x,PSInf.y+SZInf.y-2,                /*  縦線        */
  1697.             PSInf.x,PSInf.y ) ;
  1698.  
  1699.     XORno = ZERO ;
  1700.  
  1701. /*-----------------------------------------------------------------------------
  1702. **    LINE 描画
  1703. -----------------------------------------------------------------------------*/
  1704.     EGB_color( Gwork,0,COLOR_INFO_BOX0 ) ;    /*  前景色                    */
  1705.     for ( c=1; c<5; c++ ) {                                    /*  縦線    */
  1706.         line( Gwork,PSInf.x+c*121,PSInf.y,
  1707.                 PSInf.x+c*121,PSInf.y+SZInf.y-1 ) ;
  1708.     }
  1709.     for ( c=1; c<21; c++ ) {                                /*  横線    */
  1710.         line( Gwork,PSInf.x,PSInf.y+c*(YCDOT+1),
  1711.                 PSInf.x+SZInf.x-1,PSInf.y+c*(YCDOT+1) ) ;
  1712.     }
  1713.  
  1714. /*-----------------------------------------------------------------------------
  1715. **    曲情報表示 フラグ クリア
  1716. -----------------------------------------------------------------------------*/
  1717.     for ( c=0; c<CDDA_MAX_TRACK; c++ ) Infstat[c] = FALSE ;
  1718. }
  1719.  
  1720. /*******************************  TOC 情報表示  *****************************/
  1721. void disptoc( char sw )
  1722. /*=============================================================================
  1723. **    曲情報を表示する.
  1724. **
  1725. **    < INPUT  > : sw 真値 ならば、曲情報表示領域をクリアしてから曲情報を表示する.
  1726. **                 sw 偽値 ならば、曲情報表示領域をクリアしないで曲情報を表示する.
  1727. **    < OUTPUT > : なし
  1728. **    < RETURN > : なし
  1729. =============================================================================*/
  1730. {
  1731.     static char    initflg = FALSE ;
  1732.     int        c, cc ;
  1733.     int        no ;
  1734.  
  1735. /*-----------------------------------------------------------------------------
  1736. **    TOC 情報は、CDDA_INFO_buf. に格納されています.
  1737. **
  1738. **    他の時間情報は、それぞれ・・・
  1739. **    CDDA_INFO_buf.discend    : 全時間
  1740. **    CDDA_INFO_buf.track[0]    : TOC 時間(TOC情報格納部分)
  1741. **    CDDA_TIME_music            : 全演奏時間
  1742. **    CDDA_TIME_data            : 全データ時間
  1743. **    注意 : 全時間は、TOC時間 + 全データ時間 + 全演奏時間 + 1フレーム となります.
  1744. **    CDDA_TIME_track[]        : 各トラックの演奏(データ)時間
  1745. **    となっています.
  1746. **
  1747. **    トラック内がデータなのか音楽なのかは、次の方法で確認できます.
  1748. **    (1) CDDA_INFO_buf.track[] に格納されている時間の再上位ビットがON/OFFで確認.
  1749. **        ON ならば データ , OFFならば 音楽 です.
  1750. **    (2) CDDA_datacheck(曲番号 1~99) をCALLし、そのリターン値で確認.
  1751. **        リターン値が 真 ならば データ , 偽 ならば 音楽 です.
  1752. -----------------------------------------------------------------------------*/
  1753.  
  1754.     if ( !initflg ) {
  1755.         initflg = TRUE ;
  1756.  
  1757. /*-----------------------------------------------------------------------------
  1758. **    BOX 描画
  1759. -----------------------------------------------------------------------------*/
  1760.         EGB_color( Gwork,0,COLOR_INFO_BOX0 ) ;    /*  前景色                    */
  1761.         EGB_color( Gwork,2,COLOR_INFO_BACK ) ;    /*  面塗り色                */
  1762.         EGB_paintMode( Gwork,0x22 ) ;            /*  面塗り                    */
  1763.         EGB_writeMode( Gwork,PSET ) ;
  1764.         box( Gwork,PSInf.x,PSInf.y-1,PSInf.x+SZInf.x-1,PSInf.y+SZInf.y-1 ) ;
  1765.  
  1766.         EGB_paintMode( Gwork,0x02 ) ;            /*  境界                    */
  1767.  
  1768.         EGB_color( Gwork,0,COLOR_INFO_BOX1 ) ;    /*  前景色                    */
  1769.         line( Gwork,PSInf.x,PSInf.y+SZInf.y-2,                /*  縦線        */
  1770.                 PSInf.x,PSInf.y ) ;
  1771.         line( Gwork,PSInf.x,PSInf.y-1,                        /*  横線        */
  1772.                 PSInf.x+SZInf.x-1,PSInf.y-1 ) ;
  1773.  
  1774.         XORno = ZERO ;
  1775.  
  1776. /*-----------------------------------------------------------------------------
  1777. **    LINE 描画
  1778. -----------------------------------------------------------------------------*/
  1779.         EGB_color( Gwork,0,COLOR_INFO_BOX0 ) ;    /*  前景色                    */
  1780.         for ( c=1; c<5; c++ ) {                                    /*  縦線    */
  1781.             line( Gwork,PSInf.x+c*121,PSInf.y-1,
  1782.                     PSInf.x+c*121,PSInf.y+SZInf.y-1 ) ;
  1783.         }
  1784.         for ( c=1; c<21; c++ ) {                                /*  横線    */
  1785.             line( Gwork,PSInf.x,PSInf.y+c*(YCDOT+1),
  1786.                     PSInf.x+SZInf.x-1,PSInf.y+c*(YCDOT+1) ) ;
  1787.         }
  1788.  
  1789. /*-----------------------------------------------------------------------------
  1790. **    TITLE 描画
  1791. -----------------------------------------------------------------------------*/
  1792.         EGB_color( Gwork,0,COLOR_INFO_TITLE ) ;    /*  前景色                    */
  1793.         for ( c=0; c<5; c++ ) {
  1794.             disptext( Gwork,PSInf.x+c*121+1,PSInf.y+YCDOT," No ・・・TIME・・・ " ) ;
  1795.         }
  1796.  
  1797.     } else {
  1798.         if ( sw ) disptocclear() ;
  1799.     }
  1800.  
  1801. /*-----------------------------------------------------------------------------
  1802. **    曲情報 描画
  1803. -----------------------------------------------------------------------------*/
  1804.     if ( CDDA_NOW_status == CDDA_STAT_NOTREADY ) return ;
  1805.  
  1806.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  1807.     EGB_writeMode( Gwork,PSET ) ;
  1808.     EGB_color( Gwork,1,COLOR_INFO_BACK ) ;        /*  背景色                    */
  1809.     for ( c=1; c<21; c++ ) {
  1810.         for ( cc=0; cc<5; cc++ ) {
  1811.             no = c + cc*20 ;
  1812.             if ( no <= CDDA_INFO_buf.end ) {
  1813.                 sprintf( Textbuf," %02d %2d分%02d秒%02d ",
  1814.                         no,CDDA_TIME_track[no-1].min,
  1815.                         CDDA_TIME_track[no-1].sec,
  1816.                         CDDA_TIME_track[no-1].frame ) ;
  1817.                 if ( CDDA_data_check( no ) ) {
  1818.                     EGB_color( Gwork,0,COLOR_INFO_DATA ) ;    /*  データ    */
  1819.                 } else {
  1820.                     EGB_color( Gwork,0,COLOR_INFO_ON ) ;    /*  音楽    */
  1821.                 }
  1822.                 if ( sw || !Infstat[no-1] ) {
  1823.                     if ( no == XORno ) {
  1824.                         dispselectmusicno( ZERO ) ;
  1825.                         EGB_paintMode( Gwork,0x02 ) ;
  1826.                         EGB_writeMode( Gwork,PSET ) ;
  1827.                     }
  1828.                     disptext( Gwork,PSInf.x+cc*121+1,PSInf.y+c*(YCDOT+1)+YCDOT,
  1829.                             Textbuf ) ;
  1830.                 }
  1831.                 Infstat[no-1] = TRUE ;
  1832.             }
  1833.         }
  1834.     }
  1835.     Flg_disptoc = TRUE ;
  1836.  
  1837. /*-----------------------------------------------------------------------------
  1838. **    TOTAL TIME 描画
  1839. -----------------------------------------------------------------------------*/
  1840.     dispmusicno( SW_TOTAL,DUMMY ) ;
  1841. }
  1842.  
  1843. /*******************************  TOC 情報表示  *****************************/
  1844. void disptocmode( int mode,int musicno )
  1845. /*=============================================================================
  1846. **    演奏モード変更時の曲情報表示
  1847. **
  1848. **    < INPUT  > : 演奏モード , 演奏曲番号
  1849. **    < OUTPUT > : なし
  1850. **    < RETURN > : なし
  1851. =============================================================================*/
  1852. {
  1853.     int        c, cc ;
  1854.     int        no ;
  1855.     char    flg ;
  1856.  
  1857. /*-----------------------------------------------------------------------------
  1858. **    TOC 情報は、CDDA_INFO_buf. に格納されています.
  1859. **
  1860. **    他の時間情報は、それぞれ・・・
  1861. **    CDDA_INFO_buf.discend    : 全時間
  1862. **    CDDA_INFO_buf.track[0]    : TOC 時間(TOC情報格納部分)
  1863. **    CDDA_TIME_music            : 全演奏時間
  1864. **    CDDA_TIME_data            : 全データ時間
  1865. **    注意 : 全時間は、TOC時間 + 全データ時間 + 全演奏時間 + 1フレーム となります.
  1866. **    CDDA_TIME_track[]        : 各トラックの演奏(データ)時間
  1867. **    となっています.
  1868. **
  1869. **    トラック内がデータなのか音楽なのかは、次の方法で確認できます.
  1870. **    (1) CDDA_INFO_buf.track[] に格納されている時間の再上位ビットがON/OFFで確認.
  1871. **        ON ならば データ , OFFならば 音楽 です.
  1872. **    (2) CDDA_datacheck(曲番号 1~99) をCALLし、そのリターン値で確認.
  1873. **        リターン値が 真 ならば データ , 偽 ならば 音楽 です.
  1874. -----------------------------------------------------------------------------*/
  1875.  
  1876. /*-----------------------------------------------------------------------------
  1877. **    曲情報 描画
  1878. -----------------------------------------------------------------------------*/
  1879.     EGB_paintMode( Gwork,0x02 ) ;                /*  境界                    */
  1880.     EGB_writeMode( Gwork,OPAQUE ) ;
  1881.     EGB_color( Gwork,1,COLOR_INFO_BACK ) ;        /*  背景色                    */
  1882.     for ( c=1; c<21; c++ ) {
  1883.         for ( cc=0; cc<5; cc++ ) {
  1884.             no = c + cc*20 ;
  1885.             if ( no <= CDDA_INFO_buf.end &&
  1886.                     CDDA_NOW_status != CDDA_STAT_NOTREADY ) {
  1887.                 sprintf( Textbuf," %02d %2d分%02d秒%02d ",
  1888.                         no,CDDA_TIME_track[no-1].min,
  1889.                         CDDA_TIME_track[no-1].sec,
  1890.                         CDDA_TIME_track[no-1].frame ) ;
  1891.                 if ( CDDA_data_check( no ) ) {
  1892.                     flg = TRUE ;
  1893.                     EGB_color( Gwork,0,COLOR_INFO_DATA ) ;    /*  データ        */
  1894.                 } else {
  1895.                     switch ( mode ) {
  1896.                     case SW_PROGRAM :
  1897.                         if ( Prginf[no-1] ) {
  1898.  
  1899. /*    ↓↓                        ★★ DEBUG ★★                        ↓↓    */
  1900.                             if ( CDDA_DEBUG ) {
  1901.                                 if ( Prginf[no-1] < 0 ) {
  1902.                                     printf( "<disptoc2> " ) ;
  1903.                                     printf( "musicno = %d",no ) ;
  1904.                                     printf( " , Prginf = %d\n",Prginf[no-1]) ;
  1905.                                 }
  1906.                             }
  1907. /*    ↑↑                        ★★ DEBUG ★★                        ↑↑    */
  1908.  
  1909.                             flg = TRUE ;
  1910.                             EGB_color( Gwork,0,COLOR_INFO_ON ) ;
  1911.                         } else {
  1912.                             flg = FALSE ;
  1913.                             EGB_color( Gwork,0,COLOR_INFO_OFF ) ;
  1914.                         }
  1915.                         break ;
  1916.                     case SW_SINGLE :
  1917.                         if ( no == musicno ) {
  1918.                             flg = TRUE ;
  1919.                             EGB_color( Gwork,0,COLOR_INFO_ON ) ;
  1920.                         } else {
  1921.                             flg = FALSE ;
  1922.                             EGB_color( Gwork,0,COLOR_INFO_OFF ) ;
  1923.                         }
  1924.                         break ;
  1925.                     case SW_CONTINUE :
  1926.                         if ( no < musicno ) {
  1927.                             flg = FALSE ;
  1928.                             EGB_color( Gwork,0,COLOR_INFO_OFF ) ;
  1929.                         } else {
  1930.                             flg = TRUE ;
  1931.                             EGB_color( Gwork,0,COLOR_INFO_ON ) ;
  1932.                         }
  1933.                     }
  1934.                 }
  1935.                 if ( (Infstat[no-1] && !flg) || (!Infstat[no-1] && flg ) ||
  1936.                         !Flg_disptoc ) {
  1937.                     if ( no == XORno ) {
  1938.                         dispselectmusicno( ZERO ) ;
  1939.                         EGB_paintMode( Gwork,0x02 ) ;
  1940.                         EGB_writeMode( Gwork,OPAQUE ) ;
  1941.                     }
  1942.                     disptext( Gwork,PSInf.x+cc*121+1,PSInf.y+c*(YCDOT+1)+YCDOT,
  1943.                             Textbuf ) ;
  1944.                 }
  1945.                 Infstat[no-1] = flg ;
  1946.             }
  1947.         }
  1948.     }
  1949.     Flg_disptoc = TRUE ;
  1950.  
  1951. /*-----------------------------------------------------------------------------
  1952. **    TOTAL TIME 描画
  1953. -----------------------------------------------------------------------------*/
  1954.     dispmusicno( SW_TOTAL,DUMMY ) ;
  1955. }
  1956.  
  1957.